# -*- encoding: utf-8 -*-

import re

import artlista as listat
import shscript                 # shell-skirptit
from parser    import *         # wikitekstin parseri
from tekstiapu import *         # apufunktioita tekstin muokkaukseen

# korvattavat genetiivimuodot ja korvaavat kielikoodit
kielet = { 
    u'Abhaasin' : "ab", 
    u'Adangmen' : "ada", 
    u'Adygen' : "ady", 
    u'Afarin' : "aa", 
    u'Afgaanin' : "ps", 
    u'Afrihilin' : "afh", 
    u'Afrikaansin' : "af", 
    u'Aimaran' : "ay", 
    u'Ainun' : "ain", 
    u'Akanin' : "ak", 
    u'Akkadin' : "akk", 
    u'Alasaksan' : "nds", 
    u'Alasorbin' : "dsb", 
    u'Albanian' : "sq", 
    u'Aleutin' : "ale", 
    u'Algonkikielen' : "alg", 
    u'Altain' : "alt", 
    u'Ambon' : "ng", 
    u'Amharan' : "am", 
    u'Amuzgon' : "amu", 
    u'Angikan' : "anp", 
    u'Apaššikielen' : "apa", 
    u'Aputain' : "apx", 
    u'Arabian' : "ar", 
    u'Aragonian' : "an", 
    u'Arapahon' : "arp", 
    u'Arawakin' : "arw", 
    u'Armenian' : "hy", 
    u'Aromanian' : "rup", 
    u'Assamin' : "as", 
    u'Asturian' : "ast", 
    u'Athabascakielen' : "ath", 
    u'Atsamin' : "cch", 
    u'Acehin' : "ace", 
    u'Atšolin' : "ach", 
    u'Avaarin' : "av", 
    u'Avestan' : "ae", 
    u'Awadhin' : "awa", 
    u'Azerin' : "az", 
    u'Babuzan' : "bzg", 
    u'Balin' : "ban", 
    u'Bambaran' : "bm", 
    u'Bambassin' : "myf", 
    u'Bamilekekielen' : "bai", 
    u'Bandan' : "bad", 
    u'Basan' : "bas", 
    u'Baskin' : "eu", 
    u'Batakkielen' : "btk", 
    u'Baškiirin' : "ba", 
    u'Bedžan' : "bej", 
    u'Belutšin' : "bal", 
    u'Bemban' : "bem", 
    u'Bengalin' : "bn", 
    u'Berberikielen' : "ber", 
    u'Bhodžpurin' : "bho", 
    u'Bhutanin' : "dz", 
    u'Biharin' : "bh", 
    u'Bikolin' : "bik", 
    u'Bilinin' : "byn", 
    u'Biman' : "bhp", 
    u'Binin' : "bin", 
    u'Bislaman' : "bi", 
    u'Bonggin' : "bdg", 
    u'Bosnian' : "bs", 
    u'Bradžin' : "bra", 
    u'Bretonin' : "br", 
    u'Bugin' : "bug", 
    u'Bulgarian' : "bg", 
    u'Burjaatin' : "bua", 
    u'Burman' : "my", 
    u'Burun' : "mhs", 
    u'Caddon' : "cad", 
    u'Cebuanon' : "ceb", 
    u'Chamicuron' : "ccc", 
    u'Chamorron' : "ch", 
    u'Cherokeen' : "chr", 
    u'Cheyennen' : "chy", 
    u'Chinook-jargonin' : "chn", 
    u'Chipewyanin' : "chp", 
    u'choctaw\'n' : "cho", 
    u'Chuukin' : "chk", 
    u'Creen' : "cr", 
    u'Creekin' : "mus", 
    u'Dakotan' : "dak", 
    u'Dargin' : "dar", 
    u'Delawaren' : "del", 
    u'Dinkan' : "din", 
    u'Divehin' : "dv", 
    u'Djulan' : "dyu", 
    u'Dogrin' : "doi", 
    u'Dogribin' : "dgr", 
    u'Dravidakielen' : "dra", 
    u'Dualan' : "dua", 
    u'Dzongkhan' : "dz", 
    u'Efikin' : "efi", 
    u'Ekajukin' : "eka", 
    u'Elamin' : "elx", 
    u'Elsassin' : "gsw", 
    u'Englannin' : "en", 
    u'Ersän' : "myv", 
    u'Eskimon' : "iu", 
    u'Espanjan' : "es", 
    u'Esperanton' : "eo", 
    u'Eteläminin' : "nan", 
    u'Etelä-ndebelen' : "nbl", 
    u'Eteländebelin' : "nr", 
    u'Eteläsaamen' : "sma", 
    u'Eteläsothon' : "sot", 
    u'Ewen' : "ee", 
    u'Ewen' : "ee", 
    u'Ewondon' : "ewo", 
    u'Fangin' : "fan", 
    u'Fantin' : "fat", 
    u'Farsin' : "per", 
    u'Fidžin' : "fj", 
    u'Filipinon' : "fil", 
    u'Foinikian' : "phn", 
    u'Fonin' : "fon", 
    u'Friisin' : "fy", 
    u'Friulin' : "fur", 
    u'Fulanin' : "ful", 
    u'Fulfulden' : "ff", 
    u'Futunan' : "fud", 
    u'Fäärin' : "fo", 
    u'Gan' : "gaa", 
    u'Gaelin' : "gla", 
    u'Gagauzin' : "gag", 
    u'Gajon' : "gay", 
    u'Galician' : "gl", 
    u'Gallan' : "om", 
    u'Ganin' : "gan", 
    u'Gandan' : "lg", 
    u'Gbajan' : "gba", 
    u'Georgian' : "ka", 
    u'Ge’ezin' : "gez", 
    u'Gondin' : "gon", 
    u'Gootin' : "got", 
    u'Gorontalon' : "gor", 
    u'Grebon' : "grb", 
    u'Grönlannin' : "kl", 
    u'Guaranin' : "gn", 
    u'Gudžaratin' : "gu", 
    u'Gwitšinin' : "gwi", 
    u'Haidan' : "hai", 
    u'Haitin' : "ht", 
    u'Hakkan' : "hak", 
    u'Hantin' : "kca", 
    u'Hausan' : "ha", 
    u'Havaijin' : "haw", 
    u'Heetin' : "hit", 
    u'Heprean' : "he", 
    u'Hereron' : "hz", 
    u'Hiligainon' : "hil", 
    u'Himatšalin' : "him", 
    u'Hindin' : "hi", 
    u'Hiri-motun' : "ho", 
    u'Hmongin' : "hmn", 
    u'Hollannin' : "nl", 
    u'Hupan' : "hup", 
    u'Ibanin' : "iba", 
    u'Ida\'anin' : "dbj", 
    u'Idon' : "io", 
    u'Idžokielen' : "ijo", 
    u'Igbon' : "ig", 
    u'Iirin' : "ga", 
    u'Ilokon' : "ilo", 
    u'Inarinsaamen' : "smn", 
    u'Indonesian' : "id", 
    u'Inguušin' : "inh", 
    u'Inkeroisen' : "ink", 
    u'Interlinguan' : "ia", 
    u'Interlinguen' : "ie", 
    u'Inuktitutin' : "iu", 
    u'Inupiaqin' : "ik", 
    u'Irokeesikielen' : "iro", 
    u'Islannin' : "is", 
    u'Italian' : "it", 
    u'Itäfriisin' : "frs", 
    u'Jaavan' : "jv", 
    u'Jagoin' : "sne", 
    u'Jakuutin' : "sah", 
    u'Jaon' : "yao", 
    u'Japanin' : "ja", 
    u'Japin' : "yap", 
    u'Jiddišin' : "yi", 
    u'Jjun' : "kaj", 
    u'Joruban' : "yo", 
    u'Jupikkikielen' : "ypk", 
    u'Juutalaisarabian' : "jrb", 
    u'Juutalaispersian' : "jpr", 
    u'Kabardin' : "kbd", 
    u'Kabyylin' : "kab", 
    u'Kalaallisutin' : "kl", 
    u'Kalmukin' : "xal", 
    u'Kamban' : "kam", 
    u'Kamberan' : "xbr", 
    u'Kannadan' : "kn", 
    u'Kantoninkiinan' : "yue", 
    u'Kanurin' : "kr", 
    u'Karakalpakin' : "kaa", 
    u'Karatšai-balkaarin' : "krc", 
    u'Karenin' : "kar", 
    u'Karibin' : "car", 
    u'Karjalan' : "krl", 
    u'Karoliinin' : "cal", 
    u'Katalaanin' : "ca", 
    u'Katanganluban' : "lub", 
    u'Katšinin' : "kac", 
    u'Kavalanin' : "ckv", 
    u'Kavin' : "kaw", 
    u'Kazakin' : "kk", 
    u'Kašmirin' : "ks", 
    u'Kašubin' : "csb", 
    u'Keski-iirin' : "mga", 
    u'Keskienglannin' : "enm", 
    u'Keskihollannin' : "dum", 
    u'Keskikhmerin' : "km", 
    u'Keskiranskan' : "frm", 
    u'Keskiyläsaksan' : "gmh", 
    u'Ketšuan' : "qu", 
    u'Khasin' : "kha", 
    u'Khmerin' : "km", 
    u'Khoisankielen' : "khi", 
    u'Khotanin' : "kho", 
    u'Kiinan' : "zh", 
    u'Kikujun' : "ki", 
    u'Kimbundun' : "kmb", 
    u'Kirgiisin' : "ky", 
    u'Kiribatin' : "gil", 
    u'Kirjanorjan' : "nb", 
    u'Kirkkoslaavin' : "cu", 
    u'Klingonin' : "tlh", 
    u'Koltansaamen' : "sms", 
    u'Komin' : "kv", 
    u'Komorin' : "swb", 
    u'Kongon' : "kg", 
    u'Konkanin' : "kok", 
    u'Koptin' : "cop", 
    u'Korean' : "ko", 
    u'Kornin' : "kw", 
    u'Korsikan' : "co", 
    u'Kosraen' : "kos", 
    u'Kpellen' : "kpe", 
    u'Kreikan' : "el", 
    u'Krimintataarin' : "crh", 
    u'Kroaatin' : "hr", 
    u'Kru-kielen' : "kro", 
    u'Kuanjaman' : "kj", 
    u'Kumykin' : "kum", 
    u'Kurdin' : "ku", 
    u'Kurukhin' : "kru", 
    u'Kutenain' : "kut", 
    u'Kymrin' : "cy", 
    u'Ladinon' : "lad", 
    u'Lahndan' : "lah", 
    u'Lakotan' : "lkt", 
    u'Lamban' : "lam", 
    u'Land-dajakki-kielen' : "day", 
    u'Laon' : "lo", 
    u'Latgallin' : "ltg", 
    u'Latinan' : "la", 
    u'Latvian' : "lv", 
    u'Letzeburgin' : "lb", 
    u'Lezgin' : "lez", 
    u'Liettuan' : "lt", 
    u'Liivin' : "liv", 
    u'Limburgin' : "li", 
    u'Lingalan' : "ln", 
    u'Lojbanin' : "jbo", 
    u'Lozin' : "loz", 
    u'Katanganluban' : "lu", 
    u'Luiseñon' : "lui", 
    u'Luluanluban' : "lua", 
    u'Lundan' : "lun", 
    u'Luon' : "luo", 
    u'Lusain' : "lus", 
    u'Luulajansaamen' : "smj", 
    u'Luxemburgin' : "lb", 
    u'Länsifriisin' : "fy", 
    u'Maasain' : "mas", 
    u'Maduran' : "mad", 
    u'Magahin' : "mag", 
    u'Magorin' : "zgr", 
    u'Maithilin' : "mai", 
    u'Makassarin' : "mak", 
    u'Makedonian' : "mk", 
    u'Malagassin' : "mg", 
    u'Malaijin' : "ms", 
    u'Malajalamin' : "ml", 
    u'Malawintongan' : "tog", 
    u'Malohin' : "emb", 
    u'Maltan' : "mt", 
    u'Mandarin' : "mdr", 
    u'Mandariinikiinan' : "cmn", 
    u'Mandingon' : "man", 
    u'Mandinkan' : "mnk", 
    u'Manipurin' : "mni", 
    u'Manksin' : "glv", 
    u'Manobokielen' : "mno", 
    u'Mansin' : "mns", 
    u'Mantšun' : "mnc", 
    u'Manxin' : "gv", 
    u'Maorin' : "mi", 
    u'Mapudungunin' : "arn", 
    u'Marathin' : "mr", 
    u'Marin' : "chm", 
    u'Marshallin' : "mh", 
    u'Marwarin' : "mwr", 
    u'Mayakielen' : "myn", 
    u'Mazandaranin' : "mzn", 
    u'Mbundun' : "umb", 
    u'Menden' : "men", 
    u'Micmacin' : "mic", 
    u'Minangkabaun' : "min", 
    u'Mirandeesin' : "mwl", 
    u'Mohawkin' : "moh", 
    u'Mokšan' : "mdf", 
    u'Moldovan' : "mo", 
    u'Mon-khmer-kielen' : "mkh", 
    u'Mongon' : "lol", 
    u'Mongolin' : "mn", 
    u'Mossin' : "mos", 
    u'Motun' : "meu", 
    u'Muinaisegyptin' : "egy", 
    u'Muinaisenglannin' : "ang", 
    u'Muinaisiirin' : "sga", 
    u'Muinaiskreikan' : "grc", 
    u'Muinaisnorjan' : "non", 
    u'Muinaispersian' : "peo", 
    u'Muinaisprovensaalin' : "pro", 
    u'Muinaisranskan' : "fro", 
    u'Muinaissyyrian' : "syc", 
    u'Muinaisyläsaksan' : "goh", 
    u'Mundakielen' : "mun", 
    u'Nahuatlin' : "nah", 
    u'Napolin' : "nap", 
    u'Naurun' : "na", 
    u'Navajon' : "nv", 
    u'Ndongan' : "ng", 
    u'Nepalin' : "ne", 
    u'Newarin' : "new", 
    u'Niasin' : "nia", 
    u'Niuen' : "niu", 
    u'Njandžan' : "ny", 
    u'Nogain' : "nog", 
    u'Norjan' : "no", 
    u'Norjan' : "nb", 
    u'Norjan' : "nn", 
    u'Norsunluurannikonkoron' : "kfo", 
    u'Novialin' : "nov", 
    u'Nyamwezin' : "nym", 
    u'Nyankolen' : "nyn", 
    u'Nyoron' : "nyo", 
    u'Nziman' : "nzi", 
    u'N\'kon' : "nqo", 
    u'Odžibwan' : "oji", 
    u'Ojibwan' : "oj", 
    u'Oksitaanin' : "oc", 
    u'Orijan' : "or", 
    u'Oromon' : "om", 
    u'Osagen' : "osa", 
    u'Osmanin' : "ota", 
    u'Osseetin' : "os", 
    u'Otomikielen' : "oto", 
    u'Paalin' : "pli", 
    u'Pahlavin' : "pal", 
    u'Palaun' : "pau", 
    u'Palin' : "pi", 
    u'Pamonan' : "pmf", 
    u'Pampangan' : "pam", 
    u'Pandžabin' : "pa", 
    u'Pangasinanin' : "pag", 
    u'Papiamentun' : "pap", 
    u'Paštun' : "ps", 
    u'Pennsylvaniansaksan' : "pdc", 
    u'Persian' : "fa", 
    u'Pohjois-jin' : "ii", 
    u'Pohjoismininn' : "mnp", 
    u'Pohjois-ndebelen' : "nd", 
    u'Pohjoisfriisin' : "frr", 
    u'Pohjoissaamen' : "se", 
    u'Pohjoissothon' : "nso", 
    u'Pohnpein' : "pon", 
    u'Ponapen' : "pon", 
    u'Portugalin' : "pt", 
    u'Prakritkielen' : "pra", 
    u'Pukapukan' : "pkp", 
    u'Puolan' : "pl", 
    u'Quenyan' : "qua", 
    u'Radžastanin' : "raj", 
    u'Ranskan' : "fr", 
    u'Rapanuin' : "rap", 
    u'Rarotongan' : "rar", 
    u'Retoromaanin' : "rm", 
    u'Ripuaarin' : "ksh", 
    u'Romanin' : "rom", 
    u'Romani, suomen' : "romania", 
    u'Romanian' : "ro", 
    u'Rotuman' : "rtm", 
    u'Ruandan' : "rw", 
    u'Rundin' : "rn", 
    u'Ruotsin' : "sv", 
    u'Saksan' : "de", 
    u'Samarianaramean' : "sam", 
    u'Samoan' : "sm", 
    u'Sandawen' : "sad", 
    u'Sangon' : "sg", 
    u'Sanskritin' : "sa", 
    u'Santalin' : "sat", 
    u'Sardin' : "sc", 
    u'Sasakin' : "sas", 
    u'Selkupin' : "sel", 
    u'Serbian' : "sr", 
    u'Serbokroaatin' : "hbs", 
    u'Sererin' : "srr", 
    u'Shanin' : "shn", 
    u'Shonan' : "sn", 
    u'Sichuanin-yin' : "ii", 
    u'Sidamon' : "sid", 
    u'Siksikan' : "bla", 
    u'Sindarinin' : "sja", 
    u'Sindhin' : "sd", 
    u'Sinhalan' : "si", 
    u'Siouxkielen' : "sio", 
    u'Sisilian' : "scn", 
    u'Siswatin' : "ss", 
    u'Skotin' : "gd", 
    u'Sleesian' : "szl", 
    u'Slevin' : "den", 
    u'Slovakin' : "sk", 
    u'Sloveenin' : "sl", 
    u'Sogdin' : "sog", 
    u'Somalin' : "so", 
    u'Šonan' : "sn", 
    u'Songhaikielen' : "son", 
    u'Soninken' : "snk", 
    u'Sorbikielen' : "wen", 
    u'Sothon' : "st", 
    u'Srananin' : "srn", 
    u'Sukuman' : "suk", 
    u'Sumerin' : "sux", 
    u'Sundan' : "ma", 
    u'Suomen' : "fi", 
    u'Susun' : "sus", 
    u'Swahilin' : "sw", 
    u'Swazin' : "ss", 
    u'Sveitsinsaksan' : "gsw", 
    u'Syyrian' : "syr", 
    u'Tadžikin' : "tg", 
    u'Tagalogin' : "ti", 
    u'Tahitin' : "ty", 
    u'Tamašekin' : "tmh", 
    u'Tamilin' : "ta", 
    u'Tanskan' : "da", 
    u'Taosin' : "twf", 
    u'Tarokon' : "trv", 
    u'Tataarin' : "tt", 
    u'Telugun' : "te", 
    u'Temnen' : "tem", 
    u'Terenon' : "ter", 
    u'Tetumin' : "tet", 
    u'Thain' : "th", 
    u'Thaon' : "ssf", 
    u'Tigren' : "tig", 
    u'Tigrinjan' : "ke", 
    u'Tiibetin' : "bo", 
    u'Tivin' : "tiv", 
    u'Tlingitin' : "tli", 
    u'Tok-pisinin' : "tpi", 
    u'Tokelaun' : "tkl", 
    u'Toki ponan' : "tokipona", 
    u'Tongan' : "to", 
    u'Tongantongan' : "pe", 
    u'Tšagatain' : "chg", 
    u'Tšamkielen' : "cmc", 
    u'Tšamorron' : "ch", 
    u'Tšekin' : "cs", 
    u'Tšetšeenin' : "ce", 
    u'Tšibtšan' : "chb", 
    u'Tsimšin' : "tsi", 
    u'Tsongan' : "ts", 
    u'Tšuangin' : "za", 
    u'Tšuvassin' : "cv", 
    u'Tswanan' : "tn", 
    u'Tuamotun' : "pmt", 
    u'Tumbukan' : "tum", 
    u'Tupikielen' : "tup", 
    u'Turkin' : "tr", 
    u'Turkmeenin' : "tk", 
    u'Tuvan' : "tyv", 
    u'Tuvalun' : "tvl", 
    u'Twin' : "tw", 
    u'Tyapin' : "kcg", 
    u'Udmurtin' : "udm", 
    u'Ugaritin' : "uga", 
    u'Uiguurin' : "ug", 
    u'Ukrainan' : "uk", 
    u'Unkarin' : "hu", 
    u'Urdun' : "ur", 
    u'Uzbekin' : "uz", 
    u'Vain' : "vai", 
    u'Wakashkielen' : "wak", 
    u'Valkovenäjän' : "be", 
    u'Vallonin' : "wa", 
    u'Valtakunnanaramean' : "arc", 
    u'Wanukakan' : "wnk", 
    u'Warayn' : "war", 
    u'Washon' : "was", 
    u'Vatjan' : "vot", 
    u'Watubelan' : "wah", 
    u'Vendan' : "ve", 
    u'Venetsian' : "vec", 
    u'Venäjän' : "ru", 
    u'Vepsän' : "vep", 
    u'Vietnamin' : "vi", 
    u'Wiradhurin' : "wrh", 
    u'Viron' : "et", 
    u'Wolaittan' : "wal", 
    u'Volapükin' : "vo", 
    u'Wolofin' : "wo", 
    u'Võron' : "vro", 
    u'Wun' : "wuu", 
    u'Xhosan' : "xh", 
    u'Xiangn' : "hsn", 
    u'!Xóõn' : "nmn", 
    u'Yapin' : "yap", 
    u'Yuen' : "yue", 
    u'Yläsorbin' : "hsb", 
    u'Zandekielen' : "znd", 
    u'Zapoteekin' : "zap", 
    u'Zazan' : "zza", 
    u'Zenagan' : "zen", 
    u'Zhuangin' : "za", 
    u'Zulun' : "zu", 
    u'Zunin' : "zun", 
    }

# mallineet, joista parametri korvataan
mallineet = [ u'alatyyliä', u'alatyylinen', u'anatomia', u'arkikielinen', u'arkinen', u'arkikieli', u'arkikieltä', u'arkkitehtuuri', u'biologia', u'fysiikka', u'halventava', u'kasvitiede', u'kielioppi', u'kielitiede', u'logiikka', u'lääketiede', 
u'maantiede', u'matematiikka', u'musiikki', u'puhekieltä', u'puhekieli', u'puhekielinen', u'slangi', u'slangia', u'tähtitiede', u'uskonto', u'vanhahtava', u'vanhentunut', u'yhteys' ] 

# Sisäänkirjautuminen
def login():
    # eri tiedostoon, ettei uploadata tunnuksia vahingossa
    import eiupata
    return eiupata.login()


# Listan luominen.
def init(api):
    lst = listat.RetLista.make_embedded_in("Malline:biologia", namespaces=[0], limit=100)
    return lst


# Artikkelin editoiminen.
#  art  (uppilista.Sivu)   nykyinen artikkeli. None, jos tiedosto on uusi
#  oma  (unicode)          mahdollinen tiedostosta ladattu teksti tai None
def edit(art, oma):

    def funky(m):
        """
        Palauttaa mätsin korvaavan tekstin.
        """
        # Tutkitaan onko haluttu malline ja sisältääkö se kielen genetiivimuodon. Jos on
        # palautetaan korvaava teksti.
        if m.group(1) in mallineet:
            if m.group(2) in kielet:
                art.add_info(u"f. konteksti- ja yhteys-mallineiden parametrit")
                n = len(m.groups())
                muut = (n == 3 and m.group(3)) or ""
                return u"{{" + m.group(1) + muut + "|k=" + kielet[m.group(2)] + "}}"
        return m.group(0)
    
    # mätsää kaikkiin mallineisiin
    r0 = re.compile(u"{{([^|}]+)\|([^|}]+)(.*)}}")
            
    uusi = re.sub(r0, funky, art.wtxt)
    
    if art.on_muuttunut():
        return uusi

    art.lykkaa(u"Ei muutettu mitään.")
    return None





